# 类中的其它的内置方法

class Student(object):
    def __init__(self, name, age):
        self.name = name  # 学生姓名
        self.age = age  # 学生年龄

    # 类似java的toString方法
    def __str__(self):
        return f"Student类对象，name:{self.name},age:{self.age}"

    # 小于方法
    def __lt__(self, other):
        return self.age < other.age

    # 小于等于方法
    def __le__(self, other):
        return self.age <= other.age

    #  # 等于方法
    def __eq__(self, other):
        return self.age == other.age


stu = Student("小明", 25)
stu2 = Student("小黑", 25)

print("---打印__str__方法----")
print(str(stu))

print("----__lt__ 小于符号比较-----------")


class Student(object):
    name = None
    age = None

    def __init__(self, name, age):
        self.name = name  # 学生姓名
        self.age = age  # 学生年龄
        # 小于方法

    # 小于符号比较方法
    def __lt__(self, other):
        return self.age < other.age


stu1 = Student("小明", 15)
stu2 = Student("小明", 18)
print(stu1 < stu)

print("-------__le__小于等于比较----------")


class Student(object):
    name = None
    age = None

    def __init__(self, name, age):
        self.name = name  # 学生姓名
        self.age = age  # 学生年龄

    # 小于等于比较
    def __le__(self, other):
        return self.age <= other.age


stu1 = Student("小明", 18)
stu2 = Student("小明", 18)
print(stu1 <= stu)

print("------__eq__比较方法-----------")


class Student(object):
    name = None
    age = None

    def __init__(self, name, age):
        self.name = name  # 学生姓名
        self.age = age  # 学生年龄

    def __eq__(self, other):
        return self.age == other.age


stu1 = Student("小明", 18)
stu2 = Student("小明", 18)
print(stu1 == stu2)

print("----------类型注解---------------")
print("语法:  变量:类型")
var_1: int = 10  # var_1变量  int是类型 然后给var_1赋值
print(var_1)
var_2: float = 3.1415
var_3: bool = True

print("------类对象类型注解-------")

class Student:
    pass

# stu 变量 Student 类型 然后给stu进行赋值
stu: Student = Student()


print("------容器类中注解--------")
my_list:list=[1,2,3,5]
my_tuple: tuple=(1,2,3)
my_set: set={1,2,3}
my_dict: dict={"name":"小明"}
my_str: str="hello"

print("----------容器类型详解--------")
my_list:list[int]=[1,2,3,5]
my_tuple:tuple[str,int,bool]=("abc",2,True) # 参数1 字符串 参数2 int类型 参数3 布尔类型



print("------------形参的类型注解------------")

#形参x的类型为int  形参y的类型为bool
def add(x:int,y:bool):
    print(f"x:{x},y:{y}")

add(1,True)



print("-------返回值注解------")

#->int 代表返回值的类型
def add(x:int,y:int) ->int:
    return  x

print(add(1,2))

print("------Union使用----------")
from typing import Union
# age:形参可以是int类型和float类型
def test_union(name:str,age:Union[int,float])->int:
    print(type(age))

test_union("司军强",28)
test_union("熊大",28.4535)


print("--------多态------")

class Animal:
    # 定义方法 空实现
    def speak(self):
        pass

# 继承父类
class Dog(Animal):
    def speak(self):
        print("小狗汪汪汪....")

       # 继承父类
class Cat(Animal):
     def speak(self):
         print("小猫喵喵.....")

def make_noise(animal:Animal):
    animal.speak()

dog:Dog=Dog()
cat:Cat=Cat()

make_noise(dog)
make_noise(cat)


